#install.packages("corrplot")
#install.packages("dendextend")
#install.packages("docxtractr")
#install.packages("dplyr")
#install.packages("Formula")
#install.packages("ggfortify")
#install.packages("ggplot2", dependencies = TRUE)
#install.packages("ggpubr")
#install.packages("Hmisc")
#install.packages("lattice")
#install.packages("readxl")
#install.packages("survival")
#install.packages("tidyr")
#install.packages("tidyverse")

library(corrplot)
library(dendextend)
library(docxtractr)
library(dplyr)
library(Formula)
library(ggfortify)
library(ggplot2)
library(ggpubr)
library(Hmisc)
library(lattice)
library(readxl)
library(survival)
library(tidyr)
library(tidyverse)

Introduction

Under abiotic stress such as salinity, several morphological and physiological parameters of plants are affected. As function of their location, plants from the same species can exhibit different tolerance to abiotic stress. In the study we will review, 25 accessions of Eruca sativa from different regions of Pakistan were analyzed. Each accession have been separated into two groups according to the received treatment: first group underwent salt stress (150 mM NaCl) during two weeks and the second was the control. Following that 19 morpho-physiological traits were measured.

The data was obtained from the paper "Evaluation of salt tolerance in Eruca sativa accessions based on morpho-physiological traits" (Afsar et. al 2020)

Objectives and hypotheses

Our main objectives are:

  1. Explore the effects of salt stress on various morpho-physiological traits in different E. sativa accessions.
  2. Identify traits the salt stress has the biggest influence on.
  3. Define the susceptible and resistant accessions.
  4. Compare our results with the ones from the paper.
  5. Explore if location can be linked to salt-tolerance.

Main hypothesis:

Methods

What have you done? And what did you use to do it? Step by step, so anyone could do it again by reading this part.

1. Downloading and tidying the data.

First we had to download the data.xls file from the paper. The tables needed to be tidied (column names organized, empty cells filled, the values formatted, etc.). Then we had to download the location of accessions.doc data and tidied this table as well.

In order to be able to work with all of morpho-physiological parameters we had to unify them (because of different number of replicates in different categories of morpho-physiological traits measures). The unification was done trough the mean in every accession and treatment. With unified data we created a summary table (Table 1).

2. Test of normality and statistical difference of variables.

Once we had the summary table, we tested the normality of variables with Shapiro–Wilk test. Our Null Hypothesis (H0) was that morpho-physiological parameters' distribution was normal. The results for every group of morpho-physiological traits were summarized in tables (Table 2-6).

If the H0 was accepted (p > 0.05) we used ANOVA, otherwise (p < 0.05) we proceeded with Kruskal-Wallis test to see if there was a significant difference between salt-treated and control plants for each variable. The parameters' distributions and results of normality tests were visualized in the boxplot figures (Figure 2.1-2.19)

Additionally, we calculated mean and standard deviation values of treated and control plants and summarized them into tables (Table 2.1-2.5).

3. Correlation analysis.

In order to see the degree of association between the morpho-physiological parameters (and, additionally, elevation) we performed Pearson correlation analysis. The results were visualized in the Figure 3.1??.

We started doing Pearson correlation using membership function values (MFV) of the 11 selected salt tolerance traits, the results were very similar to that in the article. But we discarded that analysis as we didn't understood the utility of it.

Instead we computed Pearson correlation on the means of all salt tolerance traits (treatment and control), as it shows (prior to calculating MFV) which values has positive correlation and which has the negative, thus allowing us to choose the appropriate formula for MFV calculation (see explanation of MFV calculation in the next section).

4. Salt tolerant index (STI)

In order to evaluate degree of salt tolerance (to later define the susceptible and resistant accessions), first we needed to convert all morpho-physiological parameters (control and treatment) for each accession to the salt-tolerance index (STI). STI is the ratio of the values of every morpho-physiological parameters of treated plants to control .

Here we deviated from the paper in the method to calculate STI. We considered that the way the authors calculated STI on accessions was not appropriate. We think that they arbitrary paired plants from treatment and control. Instead, we calculated STI ratio on the means of treated plants and control for every parameter. STI results are summarized in Table 3.1.

5. membership function value (MFV) calculation.

Membership function value allows to make the different variables comparable between each other, so they can be used together in order to make a ranking.

We calculated the MVF values using the formula provided in the article: \(Xp=[(X−Xmin)/(Xmax−Xmin)]×100%\). For the traits inversely related to salt tolerance (Electrolyte leakage, Na, K, Ca) we used the second formula: \(Xp=[1−(X−Xmin)/(Xmax−Xmin)]×100%\) To define which morpho-physiological parameters were inversly related, we used the results of the correlation analysis.

6. PCA

??We performed the Principal Component Analysis on the MFV values of all the variables, except for RWC and ICO2 because they did not show significant difference between treatment and control. We used 6 highest ranked variables from the results: PH, SL, RL, NL, DW, FW, LA, K_Na.

excluded: non significant paramterers (RWC, ICO2) Excluded non correlating parameters (pearson): Ca, K, Mg, Na

7. Salt-tolerance evaluation: ranking and dendogram

In order to evaluate salt tolerance, we made accession groups that behave similarly under salt stress. This was based on the MFV mean of the 6 highest ranked physio-morphological parameters from PCA analysis.

The ranking was done by ordering MFV mean values from the highest to the smallest one. Then the groups were adressed according to the same logic as in the paper (with higher MFV mean value corresponding to higher salt tolerance): 4% accessions were classified as highly tolerant, 16% as tolerant, 60% as moderately tolerant, 16% as sensitive and finally 4% as highly sensitive.

The dendogram was established based on MFV mean (6 highest). And 4 groups were formed as in the paper work.

8.Accessions map and location correlation ?

Additionally, we wanted to check if the salt tolerance was correlated to elevation. So we made a Pearson correlation analysis between MFV mean (6 highest) and elevation.

We still need to add map with accession and check for correlation between altitude and MFV ranking.

Results

(Figures and tables with captions and description of what do they mean.)

1. Data download and transformation.

###----Data download and transformation----###

##Downloading the .xlsx data
#download excel sheet from internet and store it into an Excel object
Excel <- "https://dfzljdn9uc3pi.cloudfront.net/2020/9749/1/Raw_data_Afsar_et_al.%2C_2020-PeerJ_20.5.2020.xlsx"

#create the folder "data" if it doesn't exist
D <- "data"
if (!dir.exists(D)) dir.create(D)
f <- paste0 (D, "/data.xlsx")

#download excel into the folder "data" (created beforehand) under the name "data.xlsx"
download.file(Excel, f, mode="wb")

#get the names of the excel sheets
excel.sheet <- excel_sheets(f)

##Tidying the .xlsx data
#create a list with the 4 sheet table from excel to tidy it further
X <- list()
for (i in excel.sheet){
  X[[i]] <- as.data.frame(read_xlsx(f,i))
}

#organize column names and fill the first 2 columns
for(i in names(X)){
  names(X[[i]])[1:3] <- c("Number", "Code", "Treat_Contr")
  X[[i]] <- X[[i]][-1,]
  X[[i]] <- fill(X[[i]], 1:2)
}

#transforming columns' data format 
for (i in seq_along(X)){
  X[[i]][2:3] <- lapply(X[[i]][2:3], as.factor)
  X[[i]][-(2:3)] <- lapply(X[[i]][-(2:3)], as.numeric)
}

#creating data frames from different .xlsx sheets
Morpho_t <- X$`Morphological traits`
Weight_ion <- X$`FW DW RWC Ions EL`
Chloro_c <- X$`Chlorophyll content`
Gas_e <- X$`Gas Exchange parameters`

#changing names of the columns for more convinient use
names(Morpho_t)[4:8] <- c('Shoot_Length', 
                          'Root_Length', 
                          'Plant_Height', 
                          'Number_Leaves', 
                          'Leaf_Area')
names(Chloro_c)[4] <- c('Chlorophyll_Content')
names(Weight_ion) [4:12] <- c('Fresh_Weight', 
                              'Dry_Weight', 
                              'RWC',
                              'Na',
                              'K', 
                              'Ca', 
                              'Mg', 
                              'K_Na', 
                              'Electrolyte_Leakage')
names(Gas_e) [4:7] <- c('Photsynthesis_Rate', 
                        'Intercellular_CO2', 
                        'Transpiration_Rate', 
                        'Stomatal_Conductance')

#adding NA cells into the missing 7th and 16th accession
#creating a data frame with the missing data first
Gas_e_miss <- data.frame (Number = rep(c(7, 16), each = 8),
                          Code = rep(c("Es-7", "Es-16"), each = 8),
                          Treat_Contr = rep(c("Treatment", "Control",
                                            "Treatment", "Control"), each = 4),
                          Photsynthesis_Rate = rep(NA, 16),
                          Intercellular_CO2 = rep(NA, 16),
                          Transpiration_Rate = rep(NA, 16),
                          Stomatal_Conductance = rep(NA, 16))

#changing the numbers in "Number" column
Gas_e$Number <- replace(Gas_e$Number, , rep(c(1:6, 8:15, 17:25), each = 8))

#adding NA cells into the missing 7th and 16th accession
if (!(is.element('Es-7', Gas_e$Code))) Gas_e <- rbind(Gas_e, Gas_e_miss)

#sorting the variables according to Number
Gas_e <- Gas_e[order(Gas_e$Number),]

#rewriting row names to correspond to the ordered data
row.names(Gas_e) <- c(1:200)

##Downloading the .docx data
#downloading data for the location of accessions
word <- "https://dfzljdn9uc3pi.cloudfront.net/2020/9749/1/Table_S1.docx"
w <- paste0(D, "/location.docx")
download.file(word, w, mode="wb")

##Tidying the .docx data
#creating data frame for the location of accessions
Acc_loc <- docx_extract_all_tbls(read_docx(w, track_changes = NULL),
                                 guess_header = TRUE, preserve = FALSE,
                                 trim = TRUE)
Acc_loc <- as.data.frame(Acc_loc)

#removing m from Elevation column 
Acc_loc$Elevation <- sub(' m', '', Acc_loc$Elevation)

#transforming data in the accession_loc
Acc_loc[c(1,6)] <- lapply(Acc_loc[c(1,6)], as.numeric)
Acc_loc[-c(1,6)] <- lapply(Acc_loc[-c(1,6)], as.factor)

#In order to fit the length of this table to the length of the ultimate table
#we need to double all the rows
Acc_loc_double <- Acc_loc[rep(1:25, each = 2), ]

## Creating the summarized table to work with
#create summary table for morphological trait
a <- Morpho_t %>% 
  group_by(Number, Code, Treat_Contr) %>% 
  summarise(Shoot_Length = mean(Shoot_Length),
            Root_Length = mean(Root_Length), 
            Plant_Height = mean(Plant_Height), 
            Number_Leaves = mean(Number_Leaves), 
            Leaf_Area = mean(Leaf_Area))

# remove NA values from Weight_ion table
Weight_ion <- na.omit(Weight_ion)
#Create summary table for Weight ion
b <- Weight_ion %>% 
  group_by(Number, Code, Treat_Contr) %>% 
  summarise(Fresh_Weight= mean(Fresh_Weight),
            Dry_Weight= mean(Dry_Weight),
            RWC = mean(RWC),
            Na =mean(Na),
            K =mean(K),
            Ca =mean(Ca),
            Mg= mean(Mg),
            K_Na =mean(K_Na),
            Electrolyte_Leakage= mean(Electrolyte_Leakage))
#take only the columns number 4 to 12 to avoid repetition of number, code and treatment
b <- b[4:12] 

#Create summary table for Weight_ion
c <- Chloro_c %>% 
  group_by(Number, Code, Treat_Contr) %>% 
  summarise(Chlorophyll_Content = mean(Chlorophyll_Content))
#take only the column number 4 to avoid repetition of number, code and treatment
c <- c[4]  

#Create summary table for Gas_e
d <- Gas_e %>% 
  group_by(Number, Code, Treat_Contr) %>% 
  summarise(Photsynthesis_Rate= mean(Photsynthesis_Rate),
            Intercellular_CO2= mean(Intercellular_CO2), 
            Transpiration_Rate= mean(Transpiration_Rate), 
            Stomatal_Conductance=mean(Stomatal_Conductance))
#take only the columns number 4 to 7 to avoid repetition of number, code and treatment
d <- d[4:7]

#add Acc_loc data to the table
e <- Acc_loc_double
e <- e[6]

#create data frame with all the summarized tables 
table <- data.frame(a, b, c, d, e)

##Creating the caption for the summary table
knitr::kable(table, caption = "Table 1.1 Mean values of salt tolerance traits for each accession and treatment type", align="c" , digits = round(2))
Table 1.1 Mean values of salt tolerance traits for each accession and treatment type
Number Code Treat_Contr Shoot_Length Root_Length Plant_Height Number_Leaves Leaf_Area Fresh_Weight Dry_Weight RWC Na K Ca Mg K_Na Electrolyte_Leakage Chlorophyll_Content Photsynthesis_Rate Intercellular_CO2 Transpiration_Rate Stomatal_Conductance Elevation
1 1 Es-1 Control 1.89 2.40 4.16 4.20 0.05 343.10 20.93 75.84 4.60 8.72 4.02 2.74 1.90 51.07 16.88 12.41 286.0 3.16 0.22 14
1.1 1 Es-1 Treatment 1.69 1.54 3.08 2.60 0.03 171.97 18.06 89.81 21.50 11.55 3.51 2.54 0.54 48.42 13.65 4.62 245.5 1.64 0.08 14
2 2 Es-2 Control 2.83 1.93 4.99 4.40 0.08 173.13 11.97 71.60 6.04 8.81 4.28 3.49 1.46 61.86 21.17 2.74 271.5 0.90 0.04 17
2.1 2 Es-2 Treatment 1.54 1.27 2.53 2.80 0.04 58.84 9.00 91.74 23.86 12.99 3.74 2.83 0.55 62.49 15.20 1.78 288.5 1.12 0.04 17
3 3 Es-3 Control 3.51 2.35 4.62 4.40 0.16 321.27 15.93 76.90 7.44 9.59 5.69 3.79 1.31 64.60 18.67 17.00 290.5 4.18 0.31 579
3.1 3 Es-3 Treatment 0.69 0.45 1.19 1.33 0.01 32.76 3.93 89.22 17.00 14.46 5.74 3.55 0.85 78.67 13.20 1.34 258.0 0.56 0.02 579
4 4 Es-4 Control 3.56 2.75 6.05 4.60 0.10 347.55 19.72 96.03 7.08 6.94 2.69 5.11 0.98 60.97 16.90 13.00 279.0 3.55 0.21 537
4.1 4 Es-4 Treatment 2.07 1.98 3.83 3.80 0.04 165.95 12.45 96.34 22.16 9.74 2.92 3.88 0.44 65.64 15.88 3.40 273.0 1.38 0.06 537
5 5 Es-5 Control 2.48 1.65 4.51 4.40 0.07 222.80 12.93 91.39 9.97 12.06 5.29 7.24 1.21 49.65 23.72 9.11 280.0 3.45 0.20 523
5.1 5 Es-5 Treatment 1.08 0.97 2.09 2.00 0.06 170.20 10.83 94.64 27.53 13.02 4.01 4.89 0.47 65.76 16.82 2.62 312.5 1.94 0.05 523
6 6 Es-6 Control 2.01 1.48 3.55 4.60 0.08 753.50 32.50 98.75 10.69 12.13 3.12 5.12 1.14 59.58 17.08 4.96 281.5 3.88 0.20 186
6.1 6 Es-6 Treatment 1.23 1.04 2.18 3.80 0.03 235.50 10.32 95.90 25.12 14.73 2.99 3.84 0.59 58.45 12.58 1.22 315.0 1.03 0.03 186
7 7 Es-7 Control 1.95 2.19 4.08 4.00 0.08 323.13 10.60 97.49 13.15 16.65 3.98 3.69 1.27 46.84 26.30 NA NA NA NA 159
7.1 7 Es-7 Treatment 1.49 1.15 2.69 2.40 0.06 96.48 8.52 96.00 30.73 16.97 3.04 2.71 0.55 50.04 31.32 NA NA NA NA 159
8 8 Es-8 Control 2.97 1.80 4.66 5.00 0.07 245.13 11.20 94.58 15.59 17.60 7.78 9.49 1.13 69.75 9.80 2.86 300.5 1.57 0.07 97
8.1 8 Es-8 Treatment 0.92 1.05 1.98 2.40 0.04 76.17 5.59 92.02 31.90 21.97 6.39 8.85 0.69 83.50 6.93 1.54 333.0 1.30 0.05 97
9 9 Es-9 Control 2.42 2.23 4.65 4.00 0.07 60.59 3.48 91.56 16.21 33.40 8.99 8.11 2.07 50.83 27.40 14.01 255.0 3.46 0.23 355
9.1 9 Es-9 Treatment 1.71 1.39 3.10 3.00 0.04 50.85 2.72 90.26 31.85 41.31 13.46 5.33 1.30 56.62 31.32 2.46 251.0 0.68 0.03 355
10 10 Es-10 Control 1.38 1.61 3.04 5.00 0.08 435.07 16.00 96.41 9.82 12.51 4.69 3.44 1.30 55.62 18.52 8.80 281.5 3.48 0.17 840
10.1 10 Es-10 Treatment 1.06 0.75 1.89 2.20 0.07 177.52 7.18 94.73 35.98 16.71 8.52 2.91 0.46 56.00 13.00 2.51 258.5 1.23 0.06 840
11 11 Es-11 Control 2.06 1.89 3.99 4.40 0.06 205.72 7.28 94.66 15.82 18.40 9.79 4.41 1.17 54.23 14.32 3.29 290.0 1.65 0.07 355
11.1 11 Es-11 Treatment 1.27 1.13 2.33 3.60 0.05 144.61 6.43 95.90 18.54 20.71 11.00 4.25 1.12 54.21 9.35 1.16 329.0 0.63 0.03 355
12 12 Es-12 Control 1.78 1.66 3.44 4.40 0.06 247.10 10.80 94.75 16.64 14.60 4.02 6.07 0.88 57.91 15.67 9.07 255.5 3.14 0.15 178
12.1 12 Es-12 Treatment 1.37 1.22 2.36 3.00 0.02 193.27 9.27 95.20 20.31 11.98 7.14 5.51 0.59 59.02 14.37 3.31 281.5 1.84 0.06 178
13 13 Es-13 Control 2.73 2.50 5.34 5.00 0.07 449.30 10.90 96.10 10.56 15.25 5.45 4.46 1.44 47.15 15.00 14.80 294.0 3.64 0.20 140
13.1 13 Es-13 Treatment 1.97 1.44 3.41 4.00 0.04 176.71 9.17 94.59 27.91 15.77 8.00 3.15 0.57 47.84 9.08 2.50 223.5 0.68 0.03 140
14 14 Es-14 Control 2.29 2.41 4.79 5.60 0.08 426.00 14.00 97.35 12.85 13.03 4.43 4.19 1.02 49.72 24.88 8.83 294.5 2.58 0.20 190
14.1 14 Es-14 Treatment 1.23 1.49 2.80 3.20 0.03 165.56 8.61 94.23 35.57 18.91 10.12 3.73 0.53 55.17 17.52 3.18 274.5 1.25 0.05 190
15 15 Es-15 Control 2.07 2.42 4.38 4.75 0.05 250.90 11.80 95.26 15.84 12.65 4.25 4.53 0.80 59.46 16.55 5.16 315.5 1.93 0.10 169
15.1 15 Es-15 Treatment 0.35 0.97 1.64 1.60 0.01 36.60 3.60 91.67 21.56 16.92 5.76 3.12 0.78 62.24 9.63 1.37 215.5 0.26 0.01 169
16 16 Es-16 Control 2.42 2.31 4.65 4.60 0.07 77.00 3.67 90.82 10.68 13.63 5.49 3.87 1.30 49.17 21.22 NA NA NA NA 268
16.1 16 Es-16 Treatment 0.69 0.45 1.23 1.33 0.01 33.03 3.01 88.90 22.88 19.37 12.14 2.83 0.84 52.06 12.67 NA NA NA NA 268
17 17 Es-17 Control 2.44 2.23 4.69 5.00 0.08 210.20 10.40 94.25 17.88 17.13 7.26 6.26 0.96 60.17 15.18 1.14 340.0 1.06 0.05 207
17.1 17 Es-17 Treatment 0.60 0.45 1.23 1.40 0.02 36.28 3.00 90.90 47.06 26.70 22.98 4.59 0.58 63.78 9.22 0.76 315.0 0.37 0.03 207
18 18 Es-18 Control 3.05 2.90 5.87 5.20 0.07 307.93 8.67 96.56 24.72 22.81 4.89 5.05 0.93 62.19 9.62 2.84 306.0 1.40 0.07 162
18.1 18 Es-18 Treatment 0.60 0.46 1.16 2.00 0.01 41.04 2.80 88.61 38.07 25.59 13.62 3.84 0.68 68.11 12.50 1.43 349.5 1.00 0.03 162
19 19 Es-19 Control 2.25 2.18 4.43 3.40 0.04 104.92 5.34 92.96 12.51 18.37 2.61 5.99 1.47 57.77 18.75 2.16 287.0 3.64 0.20 186
19.1 19 Es-19 Treatment 1.23 1.49 2.80 3.20 0.03 70.57 4.08 94.69 32.73 22.20 6.84 3.78 0.68 59.43 16.52 1.62 293.0 0.56 0.04 186
20 20 Es-20 Control 1.99 2.34 4.33 3.00 0.04 42.25 3.10 88.38 13.68 26.53 13.48 6.81 1.94 62.26 22.22 12.70 238.0 3.00 0.16 186
20.1 20 Es-20 Treatment 0.35 0.97 2.80 1.60 0.01 30.15 2.60 91.38 48.28 33.45 21.62 4.74 0.72 65.09 14.67 1.75 215.5 0.46 0.02 186
21 21 Es-21 Control 2.03 2.68 4.72 3.20 0.04 90.56 4.18 94.99 24.90 24.81 8.28 10.54 1.00 46.49 9.95 12.18 274.0 4.14 0.25 171
21.1 21 Es-21 Treatment 0.60 0.46 1.78 2.00 0.02 61.55 3.25 95.42 44.92 30.38 12.05 5.82 0.68 48.78 16.90 2.58 265.5 1.23 0.06 171
22 22 Es-22 Control 1.99 2.47 4.33 3.40 0.04 48.30 2.02 96.41 16.72 12.71 9.38 5.53 0.76 59.96 18.98 4.26 259.0 1.32 0.06 170
22.1 22 Es-22 Treatment 1.22 0.78 2.13 2.00 0.04 35.92 1.32 95.93 28.21 15.63 13.33 4.66 0.56 71.26 8.02 1.24 275.0 0.82 0.03 170
23 23 Es-23 Control 1.73 1.80 3.53 3.00 0.05 138.11 4.17 94.44 17.41 10.94 8.64 3.17 0.63 63.71 21.50 5.04 246.0 1.56 0.06 210
23.1 23 Es-23 Treatment 0.63 0.53 1.17 2.00 0.03 37.66 3.38 90.88 26.89 16.58 9.95 2.30 0.62 66.40 8.83 0.78 264.0 0.66 0.03 210
24 24 Es-24 Control 1.40 1.41 2.84 3.00 0.04 107.80 7.67 90.98 13.83 13.91 6.39 14.25 1.01 61.26 14.22 4.47 276.5 1.52 0.06 209
24.1 24 Es-24 Treatment 0.75 0.49 1.26 1.60 0.03 66.41 3.15 89.62 28.33 19.10 7.40 5.60 0.68 67.51 9.42 0.90 361.0 0.61 0.03 209
25 25 Es-25 Control 2.39 2.74 5.18 3.00 0.04 95.34 5.29 93.99 15.45 13.94 5.81 11.36 0.91 50.58 19.83 2.27 266.0 0.99 0.06 151
25.1 25 Es-25 Treatment 1.17 0.64 1.84 2.00 0.04 39.93 4.31 90.57 41.97 26.23 11.76 9.95 0.62 48.61 12.95 0.71 350.5 0.38 0.03 151

2. Initial statistical analysis. Normality test and significant difference test.

2.1 Morphological traits

There is a statistical difference between control and treatment for all morphological traits

  • Shoot length (SL): Shoot length is significantly reduced in the salt-stressed plants compared with the control (p < 0.05). The mean value for SL in salt-stressed plants is 1.10 ± 0.48 and 2.30 ± 0.56 for control plants. SL stress index of accessions varied from 16.73 to 89.12

  • Root length (RL): Root length is significantly reduced in the salt-stressed plants compared with the control (p < 0.05). The mean value for RL in salt-stressed plants is 0.98 ± 0.43 and 2.17 ± 0.42 for control plants. RL stress index of accessions varied from 15.91 to 73.53

  • Plant height (PH): Plant height is significantly reduced in the salt-stressed plants compared with the control (p < 0.05). The mean value for PH in salt-stressed plants is 2.18 ± 0.76 and 4.43 ± 0.77 for control plants. PH stress index of accessions varied from 19.83 to 74.07

  • Number of leaves(NL): Number of leaves is significantly reduced in the salt-stressed plants compared with the control (p < 0.05). The mean value for NL in salt-stressed plants is 2.43 ± 0.82 and 4.22 ± 0.78 for control plants. NL stress index of accessions varied from 28.00 to 94.12

  • Leaf area (LA): Leaf area is significantly reduced in the salt-stressed plants compared with the control (p < 0.05). The mean value for LA in salt-stressed plants is 0.03 ± 0.02 and 0.07 ± 0.03 for control plants. LA stress index of accessions varied from 75.95 to 100

#Performing Shapiro–Wilk test of normality
spm <- numeric()
nor_spm <- c()
for(i in names(Morpho_t[4:8])) { 
  an1 <- aov(Morpho_t[, i] ~ Morpho_t$Treat_Contr)
  spm[i] <- shapiro.test(an1$residuals)$p.value
  nor_spm <- c(nor_spm, ifelse (spm[i] <= 0.05, "False", "True"))
}
#Creating summary table with the results
spm_table <- data.frame ("P-value" = spm, "Normality" = nor_spm)

#Creating the caption for the summary table
knitr::kable(spm_table, caption = "Table 2.1 Shapiro–Wilk test results for morphological traits", align="c")
Table 2.1 Shapiro–Wilk test results for morphological traits
P.value Normality
Shoot_Length 0.0000307 False
Root_Length 0.0187623 False
Plant_Height 0.0315918 False
Number_Leaves 0.0000000 False
Leaf_Area 0.0000000 False
#Performing significance test and plotting the results and values distribution
for (i in (4:8)) {
  bmorpho <- ggboxplot(Morpho_t,
                       x = "Treat_Contr",
                       y = names(Morpho_t[i]),
                       color = names(Morpho_t[3]),
                       palette = c("blue", "red"),
                       add = "jitter") +
    stat_compare_means(data = Morpho_t, method = "kruskal.test",
                       label.x.npc = "center",
                       label.y.npc = "top") +
    theme(legend.position = "None") +
    labs(x = "",
         caption = paste("Figure 2.", (i-3),
                         "Distribution boxplot of the mean values of the",
                         names(Morpho_t[i])))
  print(bmorpho)
}

2.2 Biomass traits

  • Fresh weight (FW): Fresh weight is significantly reduced in the salt-stressed plants compared with the control (p < 0.05). The mean value for FW in salt-stressed plants 96.22 ± 66.00 and 241.06 ± 164.75 for control plants. FW stress index of accessions varied from 10.20 to 83.93

  • Dry weight (DW): Dry weight is significantly reduced in the salt-stressed plants compared with the control (p < 0.05). The mean value for DW in salt-stressed plants is 6.26 ± 4.00 and 10.58 ± 6.89 for control plants. DW stress index of accessions varied from 24.67 to 88.26

#Performing Shapiro–Wilk test of normality
spb <- numeric()
nor_spb <- c()
for(i in names(Weight_ion[4:5])) { 
  an2 <- aov(Weight_ion[, i] ~ Weight_ion$Treat_Contr)
  spb[i] <- shapiro.test(an2$residuals)$p.value
  nor_spb <- c(nor_spb, ifelse (spb[i] <= 0.05, "False", "True"))
}

#Creating summary table with the results
spb_table <- data.frame ("P-value" = spb, "Normality" = nor_spb)

#Creating the caption for the summary table
knitr::kable(spb_table, caption = "Table 2.2 Shapiro–Wilk test results for biomass traits", align="c")
Table 2.2 Shapiro–Wilk test results for biomass traits
P.value Normality
Fresh_Weight 3e-07 False
Dry_Weight 7e-07 False
#Performing significance test and plotting the results and values distribution
for (i in (4:5)) {
  bwei <- ggboxplot(Weight_ion, 
                 x = "Treat_Contr",
                 y = names(Weight_ion[i]), 
                 color = names(Weight_ion[3]),
                 palette = c("blue", "red"),
                 add = "jitter") + 
    stat_compare_means(data = Weight_ion, method = "kruskal.test",
                       label.x.npc = "center",
                       label.y.npc = "top") +
    theme(legend.position = "None") +
    labs(x = "",
         caption = paste("Figure 2.", (i+2),
                         "Distribution boxplot of the mean values of the",
                         names(Weight_ion[i])))
  print(bwei)
} 

2.3 Relative water content (RWC), electrolyte leakage (EL) and chlorophyll content (SPAD or CC)

  • Relative water content (RWC): Relative water content is not significantly different in the salt-stressed plants compared with the control (p > 0.05). The mean value for RWC in salt-stressed plants 92.77 X ± 2.65 and 92.10 ± 7.00 for control plants.

  • Electrolyte leakage (EL): Electrolyte leakage is significantly increased in the salt-stressed plants compared with the control (p < 0.05). The mean value for EL in salt-stressed plants is 60.60 ± 9.32 and 56.51 ± 6.48 for control plants.

  • Chlorophyll content (SPAD or CC): Chlorophyll content is significantly reduced in the salt-stressed plants compared with the control (p < 0.05). The mean value for CC in salt-stressed plants is 14.06 ± 6.02 and 18.17 ± 4.79 for control plants.

#Performing Shapiro–Wilk test of normality on the RWC and EL
spe <- numeric()
nor_spe <- c()
for(i in names(Weight_ion[c(6,12)])) { 
  an3 <- aov(Weight_ion[, i] ~ Weight_ion$Treat_Contr)
  spe[i] <- shapiro.test(an3$residuals)$p.value
  nor_spe <- c(nor_spe, ifelse (spe[i] <= 0.05, "False", "True"))
}

#Creating summary table with the results for RWC and EL
spe_table <- data.frame ("P-value" = spe, "Normality" = nor_spe)

#Performing Shapiro–Wilk test of normality on the SPAD
nor_spc <- c()
an4 <- aov(Chloro_c$Chlorophyll_Content ~ Chloro_c$Treat_Contr)
spc <- shapiro.test(an4$residuals)$p.value

#Creating summary table with the results for SPAD
nor_spc <- c(nor_spc, ifelse (spc <= 0.05, "False", "True"))
spc_table <- data.frame ("P-value" = spc, "Normality" = nor_spc)
row.names(spc_table) <- "Chlorophyll_Content"

#Uniting the summary tables with the results for RWC+EL and SPAD
spec_table <- dplyr::bind_rows(spe_table, spc_table)

#Creating the caption for the summary table
knitr::kable(spec_table, caption = "Table 2.3 Shapiro–Wilk test results for RWC, EL and SPAD", align="c")
Table 2.3 Shapiro–Wilk test results for RWC, EL and SPAD
P.value Normality
RWC 0.0000000 False
Electrolyte_Leakage 0.0009774 False
Chlorophyll_Content 0.0000000 False
#for RWC and EL
for (i in (c(6,12))) {
  bwei2 <- ggboxplot(Weight_ion, 
                 x = "Treat_Contr",
                 y = names(Weight_ion[i]), 
                 color = names(Weight_ion[3]),
                 palette = c("blue", "red"),
                 add = "jitter") + 
    stat_compare_means(data = Weight_ion, method = "kruskal.test",
                       label.x.npc = "center",
                       label.y.npc = "top") +
    theme(legend.position = "None") +
    labs(x = "",
         caption = paste("Figure 2.", ifelse((i<7), paste(i+2), paste(i-3)),
                         "Distribution boxplot of the mean values of the",
                         names(Weight_ion[i])))
  print(bwei2)
} 

#for SPAD
bchlo <- ggboxplot(Chloro_c, 
                 x = "Treat_Contr",
                 y = "Chlorophyll_Content", 
                 color = names(Chloro_c[3]),
                 palette = c("blue", "red"),
                 add = "jitter") 
bchlo + stat_compare_means(data = Chloro_c, method = "kruskal.test", 
                           label.x.npc = "center",
                           label.y.npc = "top") +
  theme(legend.position = "None") +
  labs(x = "", caption = paste("Fifure 2. 10 Distribution boxplot of the mean values of the",
                       names(Chloro_c[4])))

2.4 Mineral ion content

  • Sodium (Na): Sodium is significantly reduced in the salt-stressed plants compared with the control (p < 0.05). The mean value for Na in salt-stressed plants is 30.03 ± 8.84 and 13.60 ± 5.00 for control plants.

  • Potassium (K): Potassium is significantly reduced in the salt-stressed plants compared with the control (p < 0.05). The mean value for K in salt-stressed plants is 19.72 ± 7.48 and 15.48 ± 6.09 for control plants.

  • Calcium (Ca): Calcium is significantly increased in the salt-stressed plants compared with the control (p < 0.05). The mean value for Ca in salt-stressed plants is 9.12 ± 5.32 and 6.03 ± 2.60 for control plants.

  • Magnesium (Mg): Magnesium is significantly reduced in the salt-stressed plants compared with the control (p < 0.05). The mean value for Mg in salt-stressed plants is 4.37 ± 1.83 and 5.95 ± 2.85 for control plants.

  • K/Na ratio: K/Na ratio is significantly reduced in the salt-stressed plants compared with the control (p < 0.05). The mean value for K/Na ratio in salt-stressed plants is 0.67 ± 0.20 and 1.20 ± 0.36 for control plants.

#Performing Shapiro–Wilk test of normality
spw <- numeric()
nor_spw <- c()
for(i in names(Weight_ion[7:11])) { 
  an5 <- aov(Weight_ion[, i] ~ Weight_ion$Treat_Contr)
  spw[i] <- shapiro.test(an5$residuals)$p.value
  nor_spw <- c(nor_spw, ifelse (spw[i] <= 0.05, "False", "True"))
}

#Creating summary table with the results
spw_table <- data.frame ("P-value" = spw, "Normality" = nor_spw)

#Creating the caption for the summary table
knitr::kable(spw_table, caption = "Table 2.4 Shapiro–Wilk test results for mineral ion content ", align="c")
Table 2.4 Shapiro–Wilk test results for mineral ion content
P.value Normality
Na 0.0002216 False
K 0.0000000 False
Ca 0.0000007 False
Mg 0.0000000 False
K_Na 0.0000002 False
#Performing significance test and plotting the results and values distribution
for (i in (7:11)) {
  bwei3 <- ggboxplot(Weight_ion, 
                 x = "Treat_Contr",
                 y = names(Weight_ion[i]), 
                 color = names(Weight_ion[3]),
                 palette = c("blue", "red"),
                 add = "jitter") + 
    stat_compare_means(data = Weight_ion, method = "kruskal.test",
                       label.x.npc = "center",
                       label.y.npc = "top") +
    theme(legend.position = "None") +
    labs(x = "",
         caption = paste("Figure 2.", (i+4),
                         "Distribution boxplot of the mean values of the",
                         names(Weight_ion[i])))
  print(bwei3)
}

2.5 Gas exchange attributes

  • Photosynthesis rate (PR): Photosynthesus rate is significantly reduced in the salt-stressed plants compared with the control (p < 0.05). The mean value for PR in salt-stressed plants is 1.95 ± 1.02 and 7.53 ± 4.84 for control plants.

  • Intercellular CO2 (ICO2): Intercellular CO2 is not significantly different in the salt-stressed plants compared with the control (p < 0.05). The mean value for ICO2 in salt-stressed plants is 284.70 ± 42.57 and 281.20 ± 22.90 for control plants.

  • Transpiration rate (TR): Transpiration rate is significantly reduced in the salt-stressed plants compared with the control (p < 0.05). The mean value for TR in salt-stressed plants is 0.94 ± 0.48 and 2.57 ± 1.13 for control plants.

  • Stomatal conductance (SC): Stomatal conductance is significantly reduced in the salt-stressed plants compared with the control (p < 0.05). The mean value for SC in salt-stressed plants is 0.039 ± 0.02 and 0.15 ± 0.08 for control plants.

#Performing Shapiro–Wilk test of normality
spg <- numeric()
nor_spg <- c()
for (i in names(Gas_e[c(4:7)])) { 
  an6 <- aov(Gas_e[, i] ~ Gas_e$Treat_Contr)
  spg[i] <- shapiro.test(an6$residuals)$p.value
  nor_spg <- c(nor_spg, ifelse (spg[i] <= 0.05, "False", "True"))
}

#Creating summary table with the results
spg_table <- data.frame ("P-value" = spg, "Normality" = nor_spg)

#Creating the caption for the summary table
knitr::kable(spg_table, caption = "Table 2.5 Shapiro–Wilk test results for gas exchange attributes", align="c")
Table 2.5 Shapiro–Wilk test results for gas exchange attributes
P.value Normality
Photsynthesis_Rate 0.0000139 False
Intercellular_CO2 0.8962970 True
Transpiration_Rate 0.0384559 False
Stomatal_Conductance 0.0000015 False
#Performing significance test and plotting the results and values distribution
#for intercellular CO2 (with ANOVA results, as this is the only normally distributed value)
Gas_e_withoutNA <- na.omit(Gas_e)
banova <- ggboxplot(Gas_e_withoutNA,
          x="Treat_Contr", 
          y= "Intercellular_CO2",
          color = names(Gas_e_withoutNA[3]),
          palette = c("blue", "red"),
          add = "jitter") 
banova  +   stat_compare_means(method = "anova") +
  theme(legend.position = "None") +
  labs(x = "",
       caption = paste("Figure 2. 16 Distribution boxplot of the mean values of the",
                       names(Gas_e_withoutNA[5])))

#for photosynthesis rate, transpiration rate, stomatal conductance
#(with Kruskal-Wallis results)
for (i in c(4,6:7)) {
  bgas <- ggboxplot(Gas_e_withoutNA, 
                 x = "Treat_Contr",
                 y = names(Gas_e_withoutNA[i]), 
                 color = names(Gas_e_withoutNA[3]),
                 palette = c("blue", "red"),
                 add = "jitter") + 
    stat_compare_means(data = Gas_e_withoutNA, method = "kruskal.test",
                       label.x.npc = "center",
                       label.y.npc = "top") +
    theme(legend.position = "None") +
    labs(x = "",
         caption = paste("Figure 2.", ifelse((i<5), paste(i+13), paste(i+12)),
                         "Distribution boxplot of the mean values of the",
                         names(Gas_e_withoutNA[i])))
  print(bgas)
}

x <- data.frame(dplyr::filter(table, table$Treat_Contr=="Treatment"))
x <- x[-(1:3)]
y <- data.frame(dplyr::filter(table, table$Treat_Contr=="Control"))
y <- y[-(1:3)]

Mean_Treat <- x %>% 
  summarise(Mean_SL = mean(Shoot_Length),
            Mean_SL = mean(Root_Length), 
            Mean_PH = mean(Plant_Height), 
            Mean_NL = mean(Number_Leaves), 
            Mean_LA = mean(Leaf_Area),
            Mean_FW = mean(Fresh_Weight),
            Mean_DW = mean(Dry_Weight),
            Mean_RWC = mean(RWC),
            Mean_Na = mean(Na),
            Mean_K = mean(K),
            Mean_Ca = mean(Ca),
            Mean_Mg = mean(Mg),
            Mean_K_Na = mean(K_Na),
            Mean_EL = mean(Electrolyte_Leakage),
            Mean_CC = mean(Chlorophyll_Content),
            Mean_PR = mean (Photsynthesis_Rate, na.rm=T),
            Mean_ICO2 = mean(Intercellular_CO2, na.rm=T),
            Mean_TR = mean(Transpiration_Rate, na.rm=T),
            Mean_S = mean(Stomatal_Conductance, na.rm=T)) 
Mean_Control <- y %>% 
  summarise(Mean_SL = mean(Shoot_Length),
            Mean_SL = mean(Root_Length), 
            Mean_PH = mean(Plant_Height), 
            Mean_NL = mean(Number_Leaves), 
            Mean_LA = mean(Leaf_Area),
            Mean_FW = mean(Fresh_Weight),
            Mean_DW = mean(Dry_Weight),
            Mean_RWC = mean(RWC),
            Mean_Na = mean(Na),
            Mean_K = mean(K),
            Mean_Ca = mean(Ca),
            Mean_Mg = mean(Mg),
            Mean_K_Na = mean(K_Na),
            Mean_EL = mean(Electrolyte_Leakage),
            Mean_CC = mean(Chlorophyll_Content),
            Mean_PR = mean (Photsynthesis_Rate, na.rm=T),
            Mean_ICO2 = mean(Intercellular_CO2, na.rm=T),
            Mean_TR = mean(Transpiration_Rate, na.rm=T),
            Mean_S = mean(Stomatal_Conductance, na.rm=T)) 
Treatment <- c('Treatment','Control')
Means <- rbind(Mean_Treat, Mean_Control)
Means$Treat_Contr <- Treatment

Sd_Treatment <- x %>%
    summarise(SD_SL = sd(Shoot_Length),
            SD_RL = sd(Root_Length),
            SD_PH = sd(Plant_Height),
            SD_NL = sd(Number_Leaves),
            SD_LA = sd(Leaf_Area),
            SD_FW = sd(Fresh_Weight),
            SD_DW = sd(Dry_Weight),
            SD_RWC = sd(RWC),
            SD_Na = sd(Na),
            SD_K = sd(K),
            SD_Ca = sd(Ca),
            SD_Mg = sd(Mg),
            SD_K_NA = sd(K_Na),
            SD_EL = sd(Electrolyte_Leakage),
            SD_CC = sd(Chlorophyll_Content),
            SD_PR = sd (Photsynthesis_Rate, na.rm=T),
            SD_I_CO2 = sd(Intercellular_CO2, na.rm=T),
            SD_TR = sd(Transpiration_Rate, na.rm=T),
            SD_SC = sd(Stomatal_Conductance, na.rm=T))
Sd_Control <-   y %>%
  summarise(SD_SL = sd(Shoot_Length),
            SD_RL = sd(Root_Length),
            SD_PH = sd(Plant_Height),
            SD_NL = sd(Number_Leaves),
            SD_LA = sd(Leaf_Area),
            SD_FW = sd(Fresh_Weight),
            SD_DW = sd(Dry_Weight),
            SD_RWC = sd(RWC),
            SD_Na = sd(Na),
            SD_K = sd(K),
            SD_Ca = sd(Ca),
            SD_Mg = sd(Mg),
            SD_K_NA = sd(K_Na),
            SD_EL = sd(Electrolyte_Leakage),
            SD_CC = sd(Chlorophyll_Content),
            SD_PR = sd (Photsynthesis_Rate, na.rm=T),
            SD_I_CO2 = sd(Intercellular_CO2, na.rm=T),
            SD_TR = sd(Transpiration_Rate, na.rm=T),
            SD_SC = sd(Stomatal_Conductance, na.rm=T))
Treatment <- c('Treatment','Control')
SD <- rbind(Sd_Treatment,Sd_Control)
SD$Treat_Contr <- Treatment

knitr::kable(Means, caption = "Table 7. Summary table for the mean of treated and control plants")
Table 7. Summary table for the mean of treated and control plants
Mean_SL Mean_PH Mean_NL Mean_LA Mean_FW Mean_DW Mean_RWC Mean_Na Mean_K Mean_Ca Mean_Mg Mean_K_Na Mean_EL Mean_CC Mean_PR Mean_ICO2 Mean_TR Mean_S Treat_Contr
0.98288 2.17992 2.43456 0.03304 96.22133 6.262533 92.76587 30.03500 19.71913 9.120667 4.368333 0.6673333 60.60373 14.06147 1.947391 284.6957 0.9404348 0.0386957 Treatment
2.17392 4.43336 4.22200 0.06664 241.06840 10.582267 92.09667 13.60367 15.48453 6.027733 5.948000 1.1988667 56.51267 18.17267 7.526739 281.1957 2.5736957 0.1458696 Control
knitr::kable(SD, caption = "Table 8. Summary table for the standard deviation (SD) of treated and control plants")
Table 8. Summary table for the standard deviation (SD) of treated and control plants
SD_SL SD_RL SD_PH SD_NL SD_LA SD_FW SD_DW SD_RWC SD_Na SD_K SD_Ca SD_Mg SD_K_NA SD_EL SD_CC SD_PR SD_I_CO2 SD_TR SD_SC Treat_Contr
0.4802925 0.4291682 0.7607550 0.823898 0.0156644 66.00101 3.997402 2.650396 8.841386 7.478913 5.315845 1.827305 0.1959651 9.321449 6.022014 1.017193 42.57340 0.475834 0.0179150 Treatment
0.5639478 0.4196222 0.7721049 0.780235 0.0254147 164.75151 6.887152 6.997688 5.007557 6.091253 2.606707 2.854427 0.3648619 6.479804 4.789543 4.839646 22.89638 1.131070 0.0801618 Control
(3) Pearson correlation
# table with all the variables but without 3 first columns
all_data <- na.omit(table[4:23])

res1 <- cor.mtest(all_data, conf.level = .95)
M1 <-cor(all_data)
corrplot(M1, p.mat = res1$p, sig.level = .05, type = "lower")
Figure 3.1. Pearson correlation table for all variables. X represent non-significative correlation (p-value > 0.05)

Figure 3.1. Pearson correlation table for all variables. X represent non-significative correlation (p-value > 0.05)

(4) Salt tolerance index (STI)

x <- data.frame(dplyr::filter(table, table$Treat_Contr=="Treatment"))
x <- x[-(1:3)]
y <- data.frame(dplyr::filter(table, table$Treat_Contr=="Control"))
y <- y[-(1:3)]


#salt tolerance index for morphological traits
STI_Shoot_Length <- x[1]/y[1]
STI_Root_Length <- x[2]/y[2]
STI_Plant_Height <- x[3]/y[3]
STI_Number_Leaves <- x[4]/y[4]
STI_Leaf_Area <- x[5]/y[5]

#trying to make a for loop
#STI1 <- data.frame()
#vecteur <- c()
#for (i in names(x)){
#  for (j in 1:4){
#    name <- paste("STI", i ,sep = "_" )
#    name <- x[j]/x[j]
#    vecteur <- c(vecteur, name)}}

#salt tolerance index for biomass
STI_Fresh_Weight <- x[6]/y[6]
STI_Dry_Weight <- x[7]/y[7]

#salt tolerance index for RWC, EL and Chlorophyll content
STI_Relative_water_content  <- x[8]/y[8]
names(STI_Relative_water_content)[1] <- "Relative_water_content" # change the name of the column of the data
STI_Electrolyte_Leakage  <- x[14]/y[14]
STI_Chlorophyll_Content <- x[15]/y[15]

# salt tolerance index for Mineral ion content
STI_Na <- x[9]/y[9]
STI_K <- x[10]/y[10]
STI_Ca <- x[11]/y[11]
STI_Mg <- x[12]/y[12]
STI_K_Na <- x[13]/y[13]

# salt tolerance index for Gas exchange attributes
STI_Photosynthesis_rate <- x[16]/y[16]
STI_Intercellular_CO2 <- x[17]/y[17]
STI_Transpiration_Rate <- x[18]/y[18]
STI_Stomatal_Conductance <- x[19]/y[19]

STI <- data.frame(STI_Shoot_Length,
                  STI_Root_Length, 
                  STI_Plant_Height, 
                  STI_Number_Leaves, 
                  STI_Leaf_Area, 
                  STI_Fresh_Weight, 
                  STI_Dry_Weight,
                  STI_Relative_water_content, 
                  STI_Electrolyte_Leakage,
                  STI_Na,
                  STI_K,
                  STI_Ca,
                  STI_Mg,
                  STI_K_Na,
                  STI_Chlorophyll_Content,
                  STI_Photosynthesis_rate,
                  STI_Intercellular_CO2,
                  STI_Transpiration_Rate,
                  STI_Stomatal_Conductance)

knitr::kable(STI, caption = "Table 4.1. Summary table for salt tolerance index")
Table 4.1. Summary table for salt tolerance index
Shoot_Length Root_Length Plant_Height Number_Leaves Leaf_Area Fresh_Weight Dry_Weight Relative_water_content Electrolyte_Leakage Na K Ca Mg K_Na Chlorophyll_Content Photsynthesis_Rate Intercellular_CO2 Transpiration_Rate Stomatal_Conductance
1.1 0.8912355 0.6397671 0.7407407 0.6190476 0.6956522 0.5012338 0.8625796 1.1842036 0.9481757 4.673913 1.3245413 0.8746888 0.9281364 0.2824561 0.8084896 0.3725332 0.8583916 0.5174051 0.3563218
2.1 0.5455830 0.6594203 0.5068109 0.6363636 0.5000000 0.3398344 0.7523677 1.2812980 1.0102382 3.953065 1.4744608 0.8739300 0.8126195 0.3735763 0.7181102 0.6496350 1.0626151 1.2375691 1.0000000
3.1 0.1974957 0.1920136 0.2569204 0.3027273 0.0759494 0.1019714 0.2466527 1.1603017 1.2178019 2.284498 1.5078206 1.0076112 0.9375000 0.6530612 0.7071429 0.0788235 0.8881239 0.1327751 0.0720000
4.1 0.5805727 0.7180233 0.6326396 0.8260870 0.4375000 0.4774903 0.6312320 1.0031933 1.0765362 3.128941 1.4041326 1.0880893 0.7604439 0.4489796 0.9398422 0.2615385 0.9784946 0.3887324 0.2941176
5.1 0.4346774 0.5895884 0.4631766 0.4545455 0.8484848 0.7639138 0.8376289 1.0355254 1.3243824 2.762542 1.0798784 0.7580340 0.6751035 0.3922652 0.7092059 0.2883031 1.1160714 0.5616836 0.2592593
6.1 0.6141575 0.7054054 0.6148649 0.8260870 0.3750000 0.3125481 0.3173846 0.9711378 0.9810355 2.349392 1.2147568 0.9583333 0.7517107 0.5198238 0.7365854 0.2469758 1.1190053 0.2654639 0.1604938
7.1 0.7641026 0.5242452 0.6591577 0.6000000 0.7368421 0.2985661 0.8040881 0.9847842 1.0683937 2.336629 1.0196235 0.7644593 0.7346570 0.4330709 1.1907478 NA NA NA NA
8.1 0.3086253 0.5849057 0.4244635 0.4800000 0.6285714 0.3107289 0.4988095 0.9729330 1.1970276 2.046184 1.2483425 0.8205567 0.9322093 0.6106195 0.7074830 0.5376532 1.1081531 0.8280255 0.7777778
9.1 0.7061258 0.6245520 0.6665232 0.7500000 0.6000000 0.8392562 0.7816092 0.9858376 1.1139822 1.964433 1.2366031 1.4981454 0.6565325 0.6274194 1.1429440 0.1755889 0.9843137 0.1965318 0.1428571
10.1 0.7718023 0.4665012 0.6230263 0.4400000 0.8536585 0.4080294 0.4489583 0.9825059 1.0069524 3.665535 1.3353756 1.8146307 0.8441433 0.3564103 0.7020702 0.2857955 0.9182948 0.3548851 0.3623188
11.1 0.6143411 0.5955649 0.5832497 0.8181818 0.8214286 0.7029466 0.8826356 1.0131178 0.9996619 1.171353 1.1260306 1.1241696 0.9644747 0.9585122 0.6530850 0.3531202 1.1344828 0.3829787 0.3703704
12.1 0.7705287 0.7352587 0.6868100 0.6818182 0.4000000 0.7821395 0.8580247 1.0048024 1.0193132 1.220186 0.8205479 1.7769486 0.9071938 0.6742857 0.9170213 0.3651407 1.1017613 0.5875796 0.4262295
13.1 0.7205560 0.5748599 0.6379633 0.8000000 0.5945946 0.3933007 0.8412844 0.9843384 1.0147048 2.641426 1.0343169 1.4672783 0.7078189 0.3921569 0.6055556 0.1689189 0.7602041 0.1854396 0.1234568
14.1 0.5388646 0.6171096 0.5854576 0.5714286 0.3571429 0.3886307 0.6150000 0.9679176 1.1095468 2.769071 1.4512663 2.2868976 0.8902148 0.5228758 0.7039518 0.3601359 0.9320883 0.4835590 0.2592593
15.1 0.1673114 0.4004955 0.3745438 0.3368421 0.1851852 0.1458749 0.3050847 0.9623137 1.0466700 1.361111 1.3379447 1.3552941 0.6887417 0.9751553 0.5820745 0.2655039 0.6830428 0.1347150 0.0952381
16.1 0.2872517 0.1958406 0.2637694 0.2895652 0.1714286 0.4290074 0.8201635 0.9788952 1.0586022 2.142991 1.4204156 2.2103825 0.7299742 0.6483376 0.5970149 NA NA NA NA
17.1 0.2446634 0.2021563 0.2612958 0.2800000 0.2894737 0.1725975 0.2884615 0.9644903 1.0599136 2.632761 1.5583658 3.1660542 0.7332268 0.6041667 0.6070252 0.6666667 0.9264706 0.3474178 0.5263158
18.1 0.1956664 0.1590909 0.1982964 0.3846154 0.1621622 0.1332756 0.3225000 0.9176678 1.0951118 1.540048 1.1216572 2.7861528 0.7603960 0.7338129 1.2998267 0.5008787 1.1421569 0.7168459 0.3703704
19.1 0.5484444 0.6816514 0.6327913 0.9411765 0.7142857 0.6726554 0.7635853 1.0186102 1.0286753 2.615610 1.2084392 2.6221228 0.6307008 0.4625850 0.8808889 0.7505774 1.0209059 0.1552198 0.1851852
20.1 0.1738693 0.4141759 0.6471132 0.5333333 0.3157895 0.7136095 0.8387097 1.0340028 1.0453706 3.529240 1.2608368 1.6038576 0.6960352 0.3685567 0.6601650 0.1377953 0.9054622 0.1533333 0.1230769
21.1 0.2930187 0.1722595 0.3778626 0.6250000 0.4500000 0.6796849 0.7768924 1.0045268 1.0491827 1.803975 1.2245062 1.4547284 0.5526565 0.6750000 1.6984925 0.2113254 0.9689781 0.2971014 0.2323232
22.1 0.6120603 0.3154907 0.4909931 0.5882353 0.8571429 0.7436083 0.6534979 0.9949697 1.1884034 1.687400 1.2295189 1.4203516 0.8420735 0.7324561 0.4223003 0.2919109 1.0617761 0.6226415 0.5217391
23.1 0.3644752 0.2955556 0.3299377 0.6666667 0.6400000 0.2726450 0.8100000 0.9623571 1.0422465 1.544219 1.5155393 1.1520648 0.7255521 0.9841270 0.4108527 0.1536174 1.0731707 0.4244373 0.4000000
24.1 0.5350501 0.3480114 0.4440535 0.5333333 0.8000000 0.6160173 0.4104348 0.9850878 1.1019697 2.048939 1.3736817 1.1574557 0.3929825 0.6721854 0.6623681 0.2011173 1.3056058 0.4013158 0.4347826
25.1 0.4878661 0.2348651 0.3546893 0.6666667 1.0000000 0.4188665 0.8152585 0.9636486 0.9610544 2.716135 1.8820856 2.0229358 0.8764309 0.6875000 0.6529412 0.3127753 1.3176692 0.3857868 0.4800000

(5) Membership function value (MFV)

#Membership function value 
# 1-results for the traits inversely related to salt tolerance: which are electrolyte leakage, Na, K and Ca
MFV <- STI %>%
  mutate(SL = (STI$Shoot_Length - min(STI$Shoot_Length))/(max(STI$Shoot_Length)- min(STI$Shoot_Length)),
         RL = (STI$Root_Length - min(STI$Root_Length))/(max(STI$Root_Length)- min(STI$Root_Length)),
         PH = (STI$Plant_Height - min(STI$Plant_Height))/(max(STI$Plant_Height)- min(STI$Plant_Height)),
         NL = (STI$Number_Leaves - min(STI$Number_Leaves))/(max(STI$Number_Leaves)- min(STI$Number_Leaves)),
         LA = (STI$Leaf_Area - min(STI$Leaf_Area))/(max(STI$Leaf_Area)- min(STI$Leaf_Area)),
         FW = (STI$Fresh_Weight - min(STI$Fresh_Weight))/(max(STI$Fresh_Weight)- min(STI$Fresh_Weight)) ,
         DW = (STI$Dry_Weight - min(STI$Dry_Weight))/(max(STI$Dry_Weight)- min(STI$Dry_Weight)),
         RWC = (STI$Relative_water_content - min(STI$Relative_water_content))/(max(STI$Relative_water_content)- min(STI$Relative_water_content)),
         EL = 1-(STI$Electrolyte_Leakage - min(STI$Electrolyte_Leakage))/(max(STI$Electrolyte_Leakage)- min(STI$Electrolyte_Leakage)),
         CC = (STI$Chlorophyll_Content - min(STI$Chlorophyll_Content))/(max(STI$Chlorophyll_Content)- min(STI$Chlorophyll_Content)),
         Na = 1-(STI$Na - min(STI$Na))/(max(STI$Na)- min(STI$Na)),
         K = 1-(STI$K - min(STI$K))/(max(STI$K)- min(STI$K)),
         Ca =1- (STI$Ca - min(STI$Ca))/(max(STI$Ca)- min(STI$Ca)),
         Mg=(STI$Mg - min(STI$Mg))/(max(STI$Mg)- min(STI$Mg)),
         K_Na= (STI$K_Na - min(STI$K_Na))/(max(STI$K_Na)- min(STI$K_Na)),
         PR= (STI$Photsynthesis_Rate - min(STI$Photsynthesis_Rate, na.rm=T))/(max(STI$Photsynthesis_Rate, na.rm=T)- min(STI$Photsynthesis_Rate, na.rm=T)),
         ICO2= (STI$Intercellular_CO2 - min(STI$Intercellular_CO2, na.rm=T))/(max(STI$Intercellular_CO2, na.rm=T)- min(STI$Intercellular_CO2, na.rm=T)),
         TR= (STI$Transpiration_Rate - min(STI$Transpiration_Rate, na.rm=T))/(max(STI$Transpiration_Rate, na.rm=T)- min(STI$Transpiration_Rate, na.rm=T)),
         SC= (STI$Stomatal_Conductance - min(STI$Stomatal_Conductance, na.rm=T))/(max(STI$Stomatal_Conductance, na.rm=T)- min(STI$Stomatal_Conductance, na.rm=T)))%>%
  select(SL, RL, PH, NL, LA, FW, DW, RWC, EL, CC, Na, K, Ca, Mg, K_Na, PR, ICO2, TR, SC)

knitr::kable(MFV, caption = "Table 5.1. MFV table based on STI", align="c")
Table 5.1. MFV table based on STI
SL RL PH NL LA FW DW RWC EL CC Na K Ca Mg K_Na PR ICO2 TR SC
1.0000000 0.8342641 1.0000000 0.5127944 0.6706373 0.5415308 0.9684647 0.7329858 1.0000000 0.3088107 0.0000000 0.5252233 0.9515557 0.9364151 0.0000000 0.4372282 0.2763024 0.3481463 0.3063813
0.5225294 0.8683744 0.5687487 0.5389841 0.4589041 0.3226203 0.7951708 1.0000000 0.8350309 0.2386207 0.2058062 0.3839946 0.9518709 0.7342830 0.1298617 0.8497332 0.5981036 1.0000000 1.0000000
0.0416954 0.0571408 0.1080738 0.0343740 0.0000000 0.0000000 0.0000000 0.6672545 0.2833031 0.2301033 0.6821910 0.3525687 0.8963558 0.9527996 0.5281751 0.0000000 0.3231526 0.0000000 0.0000000
0.5708628 0.9700860 0.8007147 0.8259322 0.3912671 0.5093267 0.6047008 0.2351993 0.6588033 0.4108210 0.4410979 0.4502459 0.8629350 0.6429858 0.2373242 0.2719969 0.4655524 0.2316787 0.2393509
0.3693288 0.7471738 0.4883085 0.2639922 0.8360315 0.8978110 0.9292329 0.3241139 0.0000000 0.2317055 0.5457070 0.7557030 1.0000000 0.4936569 0.1564965 0.3118398 0.6823363 0.3882249 0.2017880
0.6172555 0.9481864 0.7679469 0.8259322 0.3236301 0.2856111 0.1112167 0.1470450 0.9126550 0.2529688 0.6636635 0.6286436 0.9168199 0.6277044 0.3382892 0.2503183 0.6869594 0.1201028 0.0953597
0.8243836 0.6337638 0.8496011 0.4839858 0.7152127 0.2666469 0.8764943 0.1845734 0.6804469 0.6056780 0.6673075 0.8124649 0.9973317 0.5978639 0.2146515 NA NA NA NA
0.1952055 0.7390464 0.4169407 0.3024911 0.5980431 0.2831436 0.3964837 0.1519818 0.3385234 0.2303674 0.7502312 0.5970048 0.9740356 0.9435420 0.4676884 0.6830325 0.6698591 0.6293032 0.7605364
0.7442969 0.8078568 0.8631795 0.7108541 0.5671233 1.0000000 0.8411492 0.1874700 0.5592676 0.5685529 0.7735715 0.6080637 0.6926474 0.4611611 0.4916311 0.1440488 0.4747217 0.0577091 0.0763547
0.8350198 0.5335430 0.7829926 0.2419929 0.8416305 0.4151151 0.3180992 0.1783078 0.8437650 0.2261638 0.2878975 0.5150171 0.5612177 0.7894435 0.1053972 0.3081068 0.3706938 0.2010420 0.3128436
0.6175091 0.7575467 0.7096642 0.8139761 0.8067515 0.8151195 1.0000000 0.2624920 0.8631439 0.1881211 1.0000000 0.7122262 0.8479516 1.0000000 0.9634945 0.4083292 0.7113476 0.2264708 0.3215198
0.8332604 1.0000000 0.9005783 0.6077321 0.3506849 0.9225310 0.9613026 0.2396242 0.8109084 0.3930980 0.9860579 1.0000000 0.5768663 0.8997697 0.5584236 0.4262233 0.6597874 0.4116645 0.3817128
0.7642301 0.7216109 0.8105291 0.7864769 0.5612736 0.3951381 0.9349807 0.1833474 0.8231580 0.1512091 0.5802862 0.7986233 0.7054658 0.5509025 0.1563421 0.1341196 0.1215854 0.0476690 0.0554491
0.5132489 0.7949398 0.7137344 0.4407728 0.3043053 0.3888040 0.5791780 0.1381892 0.5710574 0.2276250 0.5438428 0.4058446 0.3650952 0.8700597 0.3426388 0.4187730 0.3924285 0.3175107 0.2017880
0.0000000 0.4189831 0.3249133 0.0859712 0.1182141 0.0595475 0.0918767 0.1227783 0.7381909 0.1329734 0.9458231 0.5125969 0.7519705 0.5175211 0.9872138 0.2778999 0.0000000 0.0017559 0.0250411
0.1656807 0.0637829 0.1206998 0.0144670 0.1033268 0.4435681 0.9017708 0.1683783 0.7064738 0.1445763 0.7225921 0.4349068 0.3968703 0.5896698 0.5214432 NA NA NA NA
0.1068509 0.0747446 0.1161398 0.0000000 0.2310743 0.0957922 0.0657389 0.1287642 0.7029881 0.1523505 0.5827600 0.3049537 0.0000000 0.5953613 0.4584921 0.8750871 0.3835766 0.1942830 0.4895644
0.0391685 0.0000000 0.0000000 0.1582261 0.0932988 0.0424588 0.1192599 0.0000000 0.6094273 0.6903903 0.8947355 0.7163462 0.1577650 0.6429022 0.6432600 0.6282885 0.7234399 0.5286694 0.3215198
0.5264821 0.9069588 0.8009945 1.0000000 0.6908023 0.7740346 0.8128090 0.2775962 0.7860230 0.3650370 0.5876568 0.6345949 0.2258833 0.4159607 0.2567142 1.0000000 0.5323812 0.0203157 0.1219668
0.0090589 0.4427269 0.8273969 0.3831554 0.2595530 0.8295818 0.9309323 0.3199268 0.7416450 0.1936196 0.3268105 0.5852348 0.6487473 0.5302833 0.1227079 0.0877877 0.3504730 0.0186082 0.0550398
0.1736470 0.0228555 0.3310315 0.5217972 0.4047945 0.7835690 0.8337327 0.2388663 0.7315120 1.0000000 0.8193829 0.6194593 0.7106775 0.2793985 0.5594416 0.1972477 0.4505569 0.1487393 0.1727621
0.6143585 0.2714483 0.5395884 0.4661922 0.8454012 0.8702701 0.6397110 0.2125838 0.3614476 0.0088903 0.8526658 0.6147372 0.7249535 0.7858219 0.6413263 0.3172105 0.5967815 0.4434007 0.4846327
0.2723542 0.2368488 0.2426817 0.5848161 0.6104110 0.2314894 0.8857901 0.1228976 0.7499491 0.0000000 0.8935448 0.3452975 0.8363673 0.5819320 1.0000000 0.1113413 0.6147364 0.2639969 0.3534483
0.5079796 0.3278914 0.4530549 0.3831554 0.7835616 0.6972148 0.2575259 0.1854081 0.5911980 0.1953306 0.7494444 0.4789316 0.8341286 0.0000000 0.5554304 0.1820515 0.9809914 0.2430686 0.3909295
0.4428015 0.1315140 0.2883114 0.5848161 1.0000000 0.4298137 0.8940584 0.1264494 0.9657671 0.1880095 0.5589565 0.0000000 0.4747130 0.8459405 0.5772562 0.3482701 1.0000000 0.2290126 0.4396552

(6) Principal component analysis (PCA)

####------PCA on MFV-------###

#doing the PCA, adding the scaling into the function
MFV_salt.pca <- prcomp((na.omit(MFV[-c(8, 17, 20)])), scale. = TRUE)
#results of the PCA
MFV_salt.pca$sdev
##  [1] 2.1959249 1.6698449 1.3565852 1.2856275 1.2158618 1.1326328 0.9173147
##  [8] 0.8378035 0.7115879 0.6292612 0.4811136 0.4495871 0.3451879 0.2533067
## [15] 0.2128659 0.1474844 0.0741877
summary(MFV_salt.pca)
## Importance of components:
##                           PC1    PC2    PC3     PC4     PC5     PC6    PC7
## Standard deviation     2.1959 1.6698 1.3566 1.28563 1.21586 1.13263 0.9173
## Proportion of Variance 0.2837 0.1640 0.1082 0.09723 0.08696 0.07546 0.0495
## Cumulative Proportion  0.2837 0.4477 0.5559 0.65315 0.74011 0.81558 0.8651
##                            PC8     PC9    PC10    PC11    PC12    PC13    PC14
## Standard deviation     0.83780 0.71159 0.62926 0.48111 0.44959 0.34519 0.25331
## Proportion of Variance 0.04129 0.02979 0.02329 0.01362 0.01189 0.00701 0.00377
## Cumulative Proportion  0.90636 0.93615 0.95944 0.97306 0.98495 0.99196 0.99573
##                           PC15    PC16    PC17
## Standard deviation     0.21287 0.14748 0.07419
## Proportion of Variance 0.00267 0.00128 0.00032
## Cumulative Proportion  0.99840 0.99968 1.00000
#check, if the sums equal to quantity of observations (=17)
sum((MFV_salt.pca$sdev)^2)
## [1] 17
#plotting the results in order to evaluate the principal components
MFV_plot <- screeplot(MFV_salt.pca,
                      npcs = length(MFV_salt.pca$sdev),
                      type = "lines")

#plotting the results of the PCA
#making a scatterplot of PC1 and PC2
#creating data.frame for data labels in future plot
MFV_labels <- data.frame(Acc_loc$Elevation[-c(7, 16)])
row.names(MFV_labels) <- paste0("Ess-", c(1:6, 8:15, 17:25))
#creating the plot
MFV_pc12 <- autoplot(MFV_salt.pca, loadings = TRUE, loadings.colour = 'blue',
         loadings.label = TRUE, loadings.label.size = 5,                #plotting the variables
         data = MFV_labels, shape = FALSE, label.size = 3,              #plotting the accessions
         frame = TRUE)                                                  #plotting the frame (to see if there are any groups)
MFV_pc12 + ggtitle("Scatterplot of PC1 and PC2")                            #adding the title

#putting absolute values of the loading scores from PCA1 into a vector
MFV_loading_scores <- abs(MFV_salt.pca$rotation[,1])
#ranking the variables
MFV_var_scores_ranked <- sort(MFV_loading_scores, decreasing = TRUE)
# We used 8 highest ranked variables to include in the final MFV-based ranking
# of salt tolerance accessions
print(MFV_var_scores_ranked) # Result from PCA analysis (from PCA_analysis.R)
##           PH           SL           RL           NL           DW           FW 
## 0.4179220239 0.3843371322 0.3655251106 0.3440154296 0.3304446450 0.3118996483 
##           LA         K_Na           Na            K           Ca           EL 
## 0.2467265352 0.2306101451 0.1746912100 0.1736000724 0.1438780842 0.1395916180 
##           Mg           TR           SC           PR           CC 
## 0.0455479807 0.0433627723 0.0156462600 0.0100021446 0.0005731188

(7) MFV Ranking

# We used 6 highest ranked variables to include in the final MFV based ranking of salt tolerance
# Add into the data the mean MFV column from the 6 important variables 
MFV <- MFV %>%
  mutate(Mean = rowMeans(MFV[c(1:4, 6:7)], na.rm=T))%>%
  select(SL, RL, PH, NL, LA, FW, DW, RWC, EL, CC, Na, K, Ca, Mg, K_Na, PR, ICO2, TR, SC, Mean)

# create the ranking table out of MFV mean from 6 important variables
MFV_Ranked <- MFV[order(-MFV$Mean),]
MFV_Ranked <- MFV_Ranked[20]
MFV_Ranked$Category <- c("Highly tolerant",(rep("Tolerant", 4)), (rep("Moderately tolerant", 15)), (rep("Sensitive", 4)), "Highly sensitive" )

knitr::kable(MFV_Ranked, caption = "Table 7.1. Salt tolerance ranking based on MFV mean from 6 variables identified by PCA", align="c")
Table 7.1. Salt tolerance ranking based on MFV mean from 6 variables identified by PCA
Mean Category
12 0.8709007 Highly tolerant
9 0.8278894 Tolerant
1 0.8095090 Tolerant
19 0.8035465 Tolerant
11 0.7856359 Tolerant
13 0.7354943 Moderately tolerant
4 0.7136039 Moderately tolerant
7 0.6558126 Moderately tolerant
5 0.6159745 Moderately tolerant
2 0.6027379 Moderately tolerant
6 0.5926915 Moderately tolerant
14 0.5717796 Moderately tolerant
20 0.5704754 Moderately tolerant
22 0.5669281 Moderately tolerant
10 0.5211271 Moderately tolerant
25 0.4618859 Moderately tolerant
21 0.4444388 Moderately tolerant
24 0.4378037 Moderately tolerant
23 0.4089967 Moderately tolerant
8 0.3888851 Moderately tolerant
16 0.2849949 Sensitive
15 0.1635486 Sensitive
17 0.0765444 Sensitive
18 0.0598522 Sensitive
3 0.0402140 Highly sensitive

(8) Dendogram

#table with MFV from 6 important variables of PCA
important_var <- na.omit(MFV)
important_var <- MFV[c(1:4, 6:7)]

#make the dendogram
dend <- important_var %>% 
  scale %>% 
  dist(method = "euclidean") %>% 
  hclust(method = "ward.D2") %>% 
  as.dendrogram %>%
  set("branches_k_color", 
      value = c("red", "green","orange", "yellow"),
      k = 4)%>% # make the 4 groups and color for groups
  plot(main = "MFV Dendrogram") # plot dendogram
Figure 8.1. The MFV dendogram based on 8 variables identified by PCA

Figure 8.1. The MFV dendogram based on 8 variables identified by PCA

(9) Accessions map and location correlation

# Correlation between mean MFV (of 8 important ) and elevation 
Elev_Cor <- as.data.frame(MFV$Mean)
Elev_Cor$Elevation <- Acc_loc$Elevation

cor_1 <- rcorr(as.matrix(Elev_Cor))
cor_1_result <- paste(round(cor_1$r[2,1], 2), sep = " - correlation coefficient")
knitr::kable(cor_1_result, caption = "Table 9.1. Correlation of mean MFV and elevation", align="c")
Table 9.1. Correlation of mean MFV and elevation
x
-0.07

Discussion

From your objectives.

The priliminary results, despite being slightly different from that in the article produced the ranking that corresponds to the groups (Highly tolerant - Highly sensitive) outlined in the article.

Conclusions

The analysis is not yet completed, so conclusions will be drawn later.